package com.gitee.jmliu1983.javautils;

import java.util.HashMap;
import java.util.Map;

import com.alibaba.fastjson2.JSONObject;


// 来源yiyan.baidu.com，提示词：用java写一个递归程序，用来将一个多层对象json转换成mysql可以更新的键值对
public class JsonToSqlUpdater {

	public static Map<String, Object> convert(JSONObject jsonObj) {
		// 示例JSON对象，模拟从某个地方获取的JSON
//		Map<String, Object> jsonMap = new HashMap<>();
//		jsonMap.put("name", "John Doe");
//		jsonMap.put("age", 30);
//		jsonMap.put("isStudent", false);
//		Map<String, Object> address = new HashMap<>();
//		address.put("street", "123 Main St");
//		address.put("city", "Anytown");
//		jsonMap.put("address", address);
//
//		JSONObject jsonObj = new JSONObject();
//		JSONObject subObj = new JSONObject();
//		subObj.put("set1", 1);
//		subObj.put("set2", "set2value");
//
//		jsonObj.put("a", 1);
//		jsonObj.put("b", "bvalue1");
//		jsonObj.put("c", subObj);

		// 转换并打印结果
		Map<String, Object> sqlUpdates = convertJsonToSqlUpdates(jsonObj);
//        for (Map.Entry<String, Object> entry : sqlUpdates.entrySet()) {
//            System.out.println(entry.getKey() + " = '" + entry.getValue() + "'");
//        }
		return sqlUpdates;
	}

	private static Map<String, Object> convertJsonToSqlUpdates(Map<String, Object> jsonMap) {
		Map<String, Object> updates = new HashMap<>();
		for (Map.Entry<String, Object> entry : jsonMap.entrySet()) {
			String key = entry.getKey();
			Object value = entry.getValue();
			if (value instanceof Map) {
				// 递归处理嵌套Map
				Map<String, Object> nestedUpdates = convertJsonToSqlUpdates((Map<String, Object>) value);
				for (Map.Entry<String, Object> nestedEntry : nestedUpdates.entrySet()) {
					updates.put(key + "." + nestedEntry.getKey(), nestedEntry.getValue());
				}
			} else {
				// 将值转换为字符串并添加到更新中
				updates.put(key, value);
			}
		}
		return updates;
	}
}